package org.hyou.demos.msg.seri.util;

import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

/**
 * 16进制与2进制转换工具类
 * 
 * @author FengChangshuo
 * @version 1.0.0 2017年3月30日 下午2:46:36 created
 */
public abstract class HexUtil {
    
    /**
     * log
     */
    private static final Logger log = LoggerFactory.getLogger(HexUtil.class);
    
    /**
     * 将二进制字节数据转换成16进制字符串
     * 
     * @param byteData 字节数组
     * @return 转换后的16进制字符串表示形式
     */
    public static String encode(byte[] byteData) {
        if (null == byteData) {
            return null;
        }
        
        return new String(Hex.encodeHex(byteData, false));
    }
    
    /**
     * 将16进制的字符串转换成对应的二进制数据
     * 
     * @param hexStr 16进制字符串
     * @return 转换后的字节数组。转换不成功或参数为空则返回null
     */
    public static byte[] decode(String hexStr) {
        if (StringUtils.isEmpty(hexStr)) {
            return null;
        }
        
        try {
            return Hex.decodeHex(hexStr.toCharArray());
        } catch (DecoderException e) {
            log.error(e.getMessage(), e);
            return null;
        }
    }
    
}
